home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_08_06
/
8n06121a
< prev
next >
Wrap
Text File
|
1990-04-28
|
671b
|
21 lines
#if FLT_RADIX != 2 && FLT_RADIX != 10
#if FLT_ROUNDS == 1
#if DIV_ROUNDS == 1
y= ldexp((evens+odds)/(evens-odds),m);
#else
y= ldexp(odds/(evens-odds) + .5,m+1);
#endif
#elif FLT_ROUNDS == 0 /* make it round up */
y= ldexp((odds*2/(evens-odds)+(odds>0?
.5*(1+DBL_EPSILON):.5)) + .5, m );
#else /* just make sure it gets promoted to maximum precision */
y= ldexp(((long double)evens+odds)/((long double)evens-odds),m);
#endif
#else /* undesirable radix, keep intermediate calculation in best zone
** pow(radix,n) * frac where .5 <= frac <= 1 */
y= odds<0?ldexp(odds*2/(evens-odds)+1,m):
ldexp(odds/(evens-odds)+.5,m+1);
#endif